约束用于限制表中数据,确保数据的可靠性
常见约束
类型 | 功能 |
not null | 非空约束,保证数据不为null |
default | 默认约束,在不输入时保证字段有默认值 |
primary key | 主键,保证字段唯一性,且非空 |
unique | 唯一,保证字段唯一性,但可以为null(null只能有一个) |
foreign key | 外键,显示两表关系,保证字段值来自于主表关联列的值 |
check | 检查,用于对字段值添加限制(mysql中不支持:无效但不报错) |
添加约束
创建表时添加
基本语法:
1 | create table TableName( |
[]
内类容为使用foreign key
时需要添加的关联列
-
列级约束,所有约束均可按照列级约束添加,但
foreign key
外键约束无效。 -
表级约束:除
not null
、default
外的约束,均可作为表级约束。示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31create database students;
use students;
create table major(
id int primary key,
majorName varchar(20)
);
#列级约束
create table stuinfo(
id int primary key,
stuName varchar(20) not null,
gender char(1) check(gender='男' or gender='女'),#mysql中无效
seat int unique,
age int default 18,
majorId int references major(id) #此处列级外键无效
);
#表级约束
create table stuinfo(
id int ,
stuName varchar(20) ,
gender char(1) ,
seat int ,
age int ,
majorId int,
constraint pk primary key(id),
constraint uq unique(seat),
constraint ck check(gender='男' or gender='女'),
constraint fk_stu_major foreign key(majorid) references major(id)
);
在修改过程中添加、删除
- 添加约束语法
1 | #约束添加 |
其中
constraint1
代表对应约束语句,具体格式见上文
-
删除约束语法
列级约束删除
1
2
3
4
5#删除非空约束
alter table TableName modify column CloumnName type null;
#删除默认约束
alter table TableName modify column CloumnName type;表级约束删除
1
alter table TableName drop constraint_Type constraint_Name;
由于
primary
只有一个,因此可省略constraint_Name
特别注意
-
主键
-
同一个表中,
unique
可以有多个,但primary key
只能有一个 -
可以将多个列组合成一个主键,其格式如
1
constraint pk primary key(column1,column2)
-
-
外键
- 在从表中设置外键关系
- 从表列于主表关联列的类型要相同(或者兼容)
- 主表中的关联列必须是一个键(一般为
primary key
或者unique
)
标识列
与约束类似,在创建表时添加:
1 | #设置自增长标识列 |
在修改时添加、删除:
1 | #添加标识列 |
标识列必须为一个
key
(如primary
,unique
)一个表中仅能有一个自增长列